package sv1

import (
	"github.com/gin-gonic/gin"
	"go-vue/admin/adapt"
	"go-vue/admin/model"
	"go-vue/admin/utils"
)

type Menu struct {
}

// EditList 菜单列表（编辑列表）
func (menu *Menu) EditList(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "settingMenu.list") {
		utils.Forbidden(ctx, "settingMenu.list")
		return
	}
	editList := new(model.SystemMenu).GetAllEditMenu()
	utils.OutSuccess(ctx, editList)
}

// EditSave 保存列表（编辑列表）
func (menu *Menu) EditSave(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "settingMenu.edit") {
		utils.Forbidden(ctx, "settingMenu.edit")
		return
	}
	input := &model.SystemMenuEditList{}
	err := ctx.BindJSON(input)
	if err != nil {
		utils.OutWrong(ctx, 400, "解析数据错误", nil)
		return
	}

	id, err := new(model.SystemMenu).SaveEditMenu(input)
	if err != nil {
		utils.OutWrong(ctx, 500, "保存失败", err.Error())
		return
	}

	//回显
	menuInfo := &model.SystemMenu{Id: id}
	menuInfo.One()
	info := &model.SystemMenuEditList{
		Id:        menuInfo.Id,
		ParentId:  menuInfo.Pid,
		Alias:     menuInfo.Alias,
		Path:      menuInfo.Path,
		Redirect:  menuInfo.Redirect,
		Active:    menuInfo.Active,
		Sort:      menuInfo.Sort,
		State:     menuInfo.State,
		Component: menuInfo.Component,
		Meta: model.Meta{
			Icon:             menuInfo.Icon,
			Title:            menuInfo.Title,
			Type:             menuInfo.Type,
			Hidden:           menuInfo.Hidden,
			Color:            menuInfo.Color,
			HiddenBreadcrumb: menuInfo.HiddenBreadcrumb,
			Affix:            menuInfo.Affix,
		},
		Icon:             menuInfo.Icon,
		Title:            menuInfo.Title,
		Type:             menuInfo.Type,
		Hidden:           menuInfo.Hidden,
		Color:            menuInfo.Color,
		HiddenBreadcrumb: menuInfo.HiddenBreadcrumb,
		Affix:            menuInfo.Affix,
		Children:         nil,
		ApiList:          new(model.SystemMenuApiList).GetListByMenuId(menuInfo.Id),
	}
	utils.OutSuccess(ctx, info)
}

// EditSort 排序列表（编辑列表）
func (menu *Menu) EditSort(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "settingMenu.edit") {
		utils.Forbidden(ctx, "settingMenu.edit")
		return
	}

	input := &model.MenuSortInput{}
	err := ctx.BindJSON(input)
	if err != nil {
		utils.OutWrong(ctx, 400, "解析数据错误", nil)
		return
	}

	err = new(model.SystemMenu).SortEditMenu(input)
	if err != nil {
		utils.OutWrong(ctx, 500, "排序失败", err.Error())
		return
	}

	utils.OutSuccess(ctx, nil)
}

//EditDel 删除列表（编辑列表）
func (menu *Menu) EditDel(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "settingMenu.delete") {
		utils.Forbidden(ctx, "settingMenu.delete")
		return
	}

	input := &model.DeleteInputIds{}
	err := ctx.BindJSON(input)
	if err != nil {
		utils.OutWrong(ctx, 400, "解析数据错误", nil)
		return
	}

	err = new(model.SystemMenu).DelEditMenu(input)
	if err != nil {
		utils.OutWrong(ctx, 500, "排序失败", err.Error())
		return
	}

	utils.OutSuccess(ctx, nil)
}

type MyMenu struct {
	Menu        []*model.SystemMenuList `json:"menu"`
	Permissions []string                `json:"permissions"`
}

// MyMenu 我的菜单
func (menu *Menu) MyMenu(ctx *gin.Context) {
	userInfo, _ := ctx.Get("UserInfo")

	Info := userInfo.(*adapt.UserInfo)
	// 根据uid,role_id ,查询权限列表
	permission := adapt.GetPermissionMenu(Info.UserId)

	//再查询菜单id
	res := &MyMenu{
		Menu:        permission.GetMyMenu(),
		Permissions: permission.Permission,
	}
	utils.OutSuccess(ctx, res)
}
